package com.ld.admin.util.daliySentence;

import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.apache.commons.lang.math.RandomUtils;

import com.google.common.collect.ImmutableList;
import com.ld.admin.util.daliySentence.model.DaliySentenceModel;
import com.ld.shieldsb.common.core.collections.ListUtils;
import com.ld.shieldsb.common.core.util.StringUtils;

public class DaliySentenceUtil {
    private static List<String> orderKeys = null;
    private static final Map<String, DaliySentenceModel> CONTENT_MAP = new LinkedHashMap<>(); // 存放对象缓存

    static {
        if (ListUtils.isEmpty(orderKeys)) {
            orderKeys = new ArrayList<>();
            Set<String> keys = DaliySentenceFactory.getAllKey();
            orderKeys.addAll(keys);
        }
    }

    /**
     * 传入类型下标获取每日一句
     * 
     * @Title getDaliySentence
     * @author 吕凯
     * @date 2020年1月8日 上午8:24:06
     * @param type
     * @return String
     */
    public static String getDaliySentence(int type) {
        String content = "";
        if (type >= orderKeys.size()) { // 超出范围取最后一个
            type = orderKeys.size() - 1;
        }
        content = getDaliySentenceContent(orderKeys.get(type));
        return content;
    }

    /**
     * 根据服务器类型获取内容
     * 
     * @Title getDaliySentenceContent
     * @author 吕凯
     * @date 2020年3月30日 上午10:55:55
     * @param type
     * @return String
     */
    public static String getDaliySentenceContent(String type) {
        String content = "";
        if (StringUtils.isNotEmpty(type)) {
            content = DaliySentenceFactory.getService(type).getSentence();
        }
        return content;
    }

    /**
     * 传入字符型的key获取每日一句
     * 
     * @Title getDaliySentence
     * @author 吕凯
     * @date 2020年1月8日 上午10:51:23
     * @param type
     * @return String
     */
    public static String getDaliySentence(String type) {
        String content = "";
        if (!orderKeys.contains(type)) { // 如果不存在则默认取第一个
            type = orderKeys.get(0);
        }
        content = getDaliySentenceContent(type);
        return content;
    }

    /**
     * 获取随机句子
     * 
     * @Title getRandomSentence
     * @author 吕凯
     * @date 2020年1月8日 上午10:59:27
     * @return String
     */
    public static String getRandomSentence() {
        return getRandomSentence(null);
    }

    /**
     * 传入指定的类型集合获取随机句子
     * 
     * @Title getRandomSentence
     * @author 吕凯
     * @date 2020年1月8日 下午3:49:56
     * @param keys
     * @return String
     */
    public static String getRandomSentence(List<String> keys) {
        if (keys == null) {
            keys = orderKeys;
        } else { // 校验key是否还有效
            List<String> validKeys = new ArrayList<>();
            keys.forEach(key -> {
                if (orderKeys.contains(key)) {
                    validKeys.add(key);
                }
            });
            keys = validKeys;
        }

        String countent = null;
        if (ListUtils.isNotEmpty(keys)) {
            int typeSize = keys.size();
            int type = RandomUtils.nextInt(typeSize); // 随机数
            String key = keys.get(type);
//            key = "欧陆词典"; // 测试时写死    欧陆词典 时光网
            countent = getDaliySentence(key);
            int times = 0;
            // 如果获取不到，则改用其他随机数，保证有返回内容
            while (countent == null && times < 3) { // 尝试3次,仍获取不到就放弃获取
                type = RandomUtils.nextInt(typeSize); // 随机数
                countent = getDaliySentence(type);
                times++;
            }
        }
        return countent;
    }

    /**
     * 获取所有的keys
     * 
     * @Title getAllKeys
     * @author 吕凯
     * @date 2020年1月8日 下午4:30:14
     * @return List<String>
     */
    public static List<String> getAllKeys() {
        return orderKeys;
    }

    public static void main(String[] args) {
        String content = getRandomSentence(ImmutableList.of("时光网"));
        System.out.println(content);
    }

}
